"""
Python 集合，列表，元组，集合，字典
- 如何创建空的列表，元组，集合，字典
- 创建非空的列表，元组，集合，字典
- 访问数据(通过索引)
- 添加和删除数据
- 排序
"""


# 1. 列表
def list_example():
    print('\n1. list')

    # 1.1 创建空的列表
    list1 = []
    list2 = list()
    print(type(list1))
    print(type(list2))

    # 1.2 创建非空的列表
    list3 = [1, 2, 7, 4, 10, 9]
    list4 = list([1, 2, 2, True, 'a', 'a', 'c'])
    list5 = list((1, 2, 2, True, 'a', 'a', 'c'))
    list6 = list({1, 2, 2, True, 'a', 'a', 'c'})
    print(list3)
    print(list4)
    print(list5)
    print(list6)

    # 1.3 访问数据
    print(list3[0])
    print(list3[-1])  # 从后访问
    print(list3[0:2])  # slice

    # 1.4 添加和删除数据
    list3[3] = -9
    list3.append(5)
    print(list3)
    list3.pop(0)
    print(list3)
    list3.remove(2)
    print(list3)

    # 1.5 排序
    list3.sort()  # 正序
    print(list3)
    print(sorted(list3))
    list3.sort(reverse=True)  # 倒序
    print(list3)

    # 1.6 列表转换
    # 1.6.1 (values) = [(expressions) for (value) in (collection)]
    squares = [x * x for x in range(10)]
    print(squares)
    # 1.6.2 过滤 够数 (values) = [(expressions) for (value) in (collection) if (condition)]
    even_squares = [x * x for x in range(10) if x % 2 == 0]
    print(even_squares)


list_example()


# 2. 元组
def tuple_example():
    print('\n2. tuple')

    # 2.1 创建空元组
    tuple1 = ()
    tuple2 = tuple()
    print(type(tuple1))
    print(type(tuple2))

    # 2.2 创建非空元组
    tuple3 = (1, 2, 7, 4)
    tuple4 = tuple([1, 2, 2, True, 'a', 'a', 'c'])
    tuple5 = tuple((1, 2, 2, True, 'a', 'a', 'c'))
    tuple6 = tuple({1, 2, 2, True, 'a', 'a', 'c'})
    print(tuple3)
    print(tuple4)
    print(tuple5)
    print(tuple6)

    # 2.3 访问数据
    print(tuple3[0])
    print(tuple3[-1])  # 从后访问
    print(tuple3[0:2])  # slice

    # 2.4 添加和删除数据
    # 元组是不可变的，无法添加和删除数据

    # 2.5 排序
    print(sorted(tuple3))  # 返回的事一个有序列表


tuple_example()


# 3. 集合
def set_example():
    print('\n3. set')

    # 3.1 创建空的集合
    set1 = {}
    set2 = set()
    print(type(set1))
    print(type(set2))

    # 3.2 创建非空集合
    set1 = {1, 2, 7, 4}
    set2 = set([1, 2, 2, True, 'a', 'a', 'c'])
    set3 = set((1, 2, 2, True, 'a', 'a', 'c'))
    set4 = set({1, 2, 2, True, 'a', 'a', 'c'})
    print(set1)
    print(set2)
    print(set3)
    print(set4)

    # 3.3 访问数据 ?
    # print(set1[0])  'set' object is not subscriptable

    # 3.4 添加和删除数据
    set1.add(-1)
    print(set1)
    set1.remove(2)
    print(set1)
    set1.pop()
    print(set1)  # 弹出下标为0的元素

    # 3.5 排序
    print(sorted(set1))  # 返回的是一个有序列表


set_example()


# 4. 字典
def dict_example():
    print('\n4. dict')

    # 4.1 创建空的字典
    dict1 = {}
    dict2 = dict()
    print(type(dict1))
    print(type(dict2))

    # 4.2 创建非空字典
    dict3 = {'name': '波多野结衣', 'age': 26, '胸围': 88}
    dict4 = dict({'name': '吉泽明步', 'age': 24, '胸围': 86})
    print(dict3)
    print(dict4)

    # 4.3 访问数据
    print(dict3['name'])  # 通过key 访问
    print(dict3.keys())  # keys
    print(dict3.values())  # values
    print(dict3.items())  # keys  values paris

    # 4.4 更新数据
    dict3.update(age=21)
    dict3.update({'胸围': 98})
    print(dict3)
    # 定义一个字典
    dict5 = {'name': 'Alice', 'age': 20}
    # 定义另一个字典
    dict6 = {'age': 25, 'city': 'New York'}
    # 使用 update() 方法更新 dict1
    dict5.update(dict6)
    print(dict5)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}

    # 定义一个字典
    dict7 = {'name': 'Alice', 'age': 20}
    # 使用包含键值对的列表更新
    dict7.update([('age', 25), ('city', 'New York')])
    print(dict7)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}

    # 定义一个字典
    dict8 = {'name': 'Alice', 'age': 20}
    # 使用关键字参数更新
    dict8.update(age=25, city='New York')
    print(dict8)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}

    # 4.5 排序
    print(sorted(dict3))  # 返回一个key的列表
    print(sorted(dict3.items()))


dict_example()
